package net.gcode.sdkscheduleparser.core;

import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;

import net.gcode.sdkscheduleparser.gui.Objects;
import net.gcode.sdkscheduleparser.intface.ScheduleParser;

/**
 * Soll Methoden zum Auswerten/Umwandeln des Stundenplans bereitstellen.
 * 
 * @author Pufahl
 * 
 */
public class Stdplan {

	private Vector<Vorlesung> vorlesung;
	private String studiengang;
	private int sem;
	private final Vector<Modul> module = new Vector<Modul>();
	private static final long serialVersionUID = 1L;
	public static Stdplan instace;

	public Stdplan() {

	}

	public Stdplan(String toParse, ScheduleParser parser) {
		vorlesung = parser.parse(toParse);
		studiengang = parser.getStudiengang(toParse);
		sem = parser.getSemester(toParse);

		group();
		System.out.println(module.toString());
		Objects.setStatus("Fertig geladen");
	}

	public String showVorlesungen() {
		if (vorlesung.size() == 0) {
			return "Keine Vorlesungen gespeichert!";
		} else {
			String ret = "";

			Iterator<Vorlesung> it = vorlesung.iterator();
			while (it.hasNext()) {
				Vorlesung tmp = it.next();
				ret += tmp.toString();
			}

			return ret;
		}
	}

	private void group() {
		Objects.setStatus("Suche Module");
		Iterator<Vorlesung> it = vorlesung.iterator();
		while (it.hasNext()) {
			Vorlesung v = it.next();
			Modul m = Modul.exists(module, v.getBez(), v.getProf());
			if (m == null) {
				m = new Modul(v.getBez(), v.getProf());
				module.add(m);
			} 
				m.addVorlesung(v);
			

		}
		sortModulbyName();
	}

	public int getAnzVorlsungen() {
		return vorlesung.size();
	}

	public int getAnzModule() {
		return module.size();
	}

	public void addVorlesung(Vorlesung v) {
		vorlesung.add(v);

	}

	public void sortByDate() {
		Collections.sort(vorlesung, new VorlesungComparator());

	}
	public void sortModulbyName(){
		Collections.sort(module, new ModulComparator());
	}

	public Vector<Vorlesung> getVorlesung() {
		// TODO Auto-generated method stub
		return vorlesung;
	}

	public void add(Vorlesung parseVorlesung) {
		vorlesung.add(parseVorlesung);

	}

	public String getStudiengang() {
		return studiengang;
	}

	public int getSem() {
		return sem;
	}

	public Vector<Modul> getModule() {
		return module;
	}

	public static Stdplan getInstace() {
		return instace;
	}

	public static void setInstace(Stdplan instace) {
		Stdplan.instace = instace;
	}
}
